perm filename OCHK[NS,SYS] blob
sn#107729 filedate 1974-06-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 Definitions -- this program must be assembled with file DEFS.
C00003 00003 UUCODE: 0
C00004 00004 CHK
C00007 00005 SETZB L,B
C00012 00006 GETFIL DECOUT NXTDG NOLOOK NOENTR
C00018 00007 GETDAY DATA
C00019 ENDMK
C⊗;
;Definitions -- this program must be assembled with file DEFS.
TITLE CHK program to check consistency of NS data file
F←0
A←1
B←2
C←3
D←4
E←5
L←6
M←7
N←10
Q←11
R←12
W←13
X←14
Y←15
Z←16
P←17
LPDL←←30
PDL: BLOCK LPDL
QUOTE←←400000
GOTPN←←200000
GOTP ←←100000
GOTEXT←←40000
LSYM←←2000
SYM: BLOCK LSYM
LBUF←←40
TYBUF: BLOCK LBUF
TYPNT: 0
FILEF: BLOCK 4
MAXPTR: 0 ;MAX LEGAL VALUE FOR PTR IN DAT FILE
CMD: IOWD 1,DATA
0
ERRBK: SIXBIT /DSK/
ERRPRG
'DMP',,0
1 ;STARTING ADDRESS INCREMENT
APPPN
UUCODE: 0
RESET
PUSH P,A
SETO A,
GETLIN A
AOJE A,DET ;JUMP IF DETACHED
OUTSTR [ASCIZ/
Error #/]
PUSH P,L
PUSH P,M
PUSH P,Q
HRRZ L,40 ;ERROR CODE
PUSHJ P,DECOUT
POP P,Q
POP P,M
POP P,L
POP P,A
OUTCHR ["."]
EXIT 1,
JRST @UUCODE
DET: MOVSI A,'CHK' ;PASS PROGRAM NAME IN AC 1
MOVE B,40 ;PASS ERROR UUO IN AC 2
MOVEI 16,ERRBK
SWAP 16,
EXIT
;CHK
JRST [SETOM AUTOCK↔JRST CHK00];CHECK LAST COMPLETE DAY'S NEWS : -1
CHK: TDZA A,A ;CHECK TODAY'S NEWS : 0
MOVEI A,-1 ;STARTED UP HERE TO READ FILENAME: 0,,-1
MOVEM A,AUTOCK# ;FLAG WHETHER TO ASK FOR FILENAME
CHK00: RESET
MOVE P,[IOWD LPDL,PDL]
SKIPLE AUTOCK
OUTSTR [ASCIZ/DATA FILE: /]
SETZM JOBREN↑
HRLZ W,JOBSYM↑
CAMN W,[SYM,,0]
JRST NOMOVE
HRRI W,SYM
HRRM W,JOBSYM
HLRE X,JOBSYM
MOVN X,X
CAILE X,LSYM
UFATAL 402 ;;;NOT ENOUGH ROOM FOR SYMBOLS
ADDI X,-1(W)
BLT W,(X)
NOMOVE:
SKIPG AUTOCK ;SKIP IF WANT TO READ FILENAME
JRST GETDAY
MOVE B,[POINT 7,TYBUF]
MOVEM B,TYPNT
CHK1: INCHWL C ;READ FILENAME FROM TTY
IDPB C,B
CAIE C,LF
JRST CHK1
ILDB C,TYPNT
PUSHJ P,GETFIL
HALT .
MOVE A,[FILEF,,W]
BLT A,Z
SKIPN W
DAYCNT W, ;ASSUME TODAY
TLNN F,GOTEXT
MOVSI X,'DAT'
MOVSI A,(<CAIA>)
CAIN C,CR
CHK0: MOVSI A,(<JFCL>) ;IF FILENAME ENDS WITH CR, DON'T WORK TOO HARD
MOVEM A,INS#
MOVE A,[W,,FILEF]
BLT A,FILEF+3 ;SAVE FILENAME WE ARE ABOUT TO LOOKUP
INIT 217
SIXBIT /DSK/
0
UFATAL 404 ;;;CANT INIT DSK
LOOKUP W
JRST NOLOOK
JUMPN Z,.+2
UFATAL 406 ;;;EMPTY FILE
HLLM Z,CMD
MOVS Z,Z
MOVN Z,Z
MOVEM Z,MAXPTR
ADDI Z,DATA
CAMG Z,JOBREL↑
JRST CHK2
CORE Z,
UFATAL 410 ;;;CORE UUO FAILED
CHK2: IN CMD
JRST .+2
UFATAL 412 ;;;IN UUO FAILED TO READ FILE
RELEAS
MOVEI A,CHK50
MOVEM A,JOBREN↑
SETZB L,B
CHK3: HRRZ A,DATA(B) ;FORWARD STORY PTR
HLRZ C,DATA(A) ;BACKWARD STORY PTR
CAME C,B
UFATAL 414 ;;;INCORRECT BACK PTR IN STORY LIST
SKIPN B,A
JRST CHK3A ;END OF LIST
LDB C,[POINT 6,DATA+1(B),5];LEADING 6 BITS OF DUMP MODE COMMAND
CAIE C,77
UFATAL 416 ;;;STORY LIST ELEMENT DOES NOT POINT TO STORY LIST ELEMENT
AOJA L,CHK3
CHK3A: OUTSTR [ASCIZ/
/]
PUSHJ P,DECOUT
OUTSTR [ASCIZ / stories.
/]
MOVSI A,400000
MOVEM A,LASTWD
MOVEI B,1
TDZA L,L
CHK4: PUSHJ P,OUTWRD
HRRZ A,DATA(B) ;FORWARD DICT PTR
HLRZ C,DATA(A) ;BACKWARD DICT PTR
CAME C,B
UFATAL 420 ;;;INCORRECT BACK PTR IN DICT LIST
MOVE B,A
CAIN B,1
JRST CHK4A
MOVE C,DATA+1(A)
CAMGE C,LASTWD#
UFATAL 422 ;;;INCORRECT ORDER IN DICT LIST
MOVEM C,LASTWD
AOJA L,CHK4
CHK4A: INSKIP
JFCL
OUTSTR [ASCIZ /
/]
PUSHJ P,DECOUT
OUTSTR [ASCIZ / words./]
EXIT
CHK50: MOVEI B,1
MOVE A,[377777,,-1]
MOVEM A,LASTWD
TDZA L,L
CHK5: PUSHJ P,OUTWRD
HLRZ A,DATA(B) ;BACKWARD DICT PTR
HRRZ C,DATA(A) ;FORWARD DICT PTR
CAME C,B
UFATAL 424 ;;;INCORRECT FORWARD PTR IN DICT LIST
MOVE B,A
CAIN B,1
JRST CHK5A
MOVE C,DATA+1(A)
CAMLE C,LASTWD#
UFATAL 426 ;;;INCORRECT ORDER IN DICT LIST
MOVEM C,LASTWD
AOJA L,CHK5
CHK5A: INSKIP
JFCL
OUTSTR [ASCIZ /
/]
PUSHJ P,DECOUT
OUTSTR [ASCIZ / words./]
EXIT
OUTWRD: XCT INS#
JRST OUTWRQ
MOVEI X,1(A)
MOVE R,[POINT 7,TYBUF]
OUTWR1: MOVE Q,DATA(X)
LDB W,[POINT 5,Q,4]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,9]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,14]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,19]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,24]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,29]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
LDB W,[POINT 5,Q,34]
JUMPE W,OUTWRX
ORI W,100
IDPB W,R
TRNN Q,1
AOJA X,OUTWR1
SETZ W,
OUTWRX: IDPB W,R
OUTSTR TYBUF
MOVEI W,1
HLRE Y,DATA+1(X)
JUMPL Y,[OUTSTR [ASCIZ / (non-word)/]
JRST OUTWR4]
JUMPE Y,[SOJA W,OUTWR3]
MOVEI Z,1(X)
OUTWR2: HRRZ Z,DATA(Z)
CAML Z,MAXPTR
UFATAL 430 ;;;PTR OUT OF RANGE IN WORD LIST
JUMPE Z,OUTWR3
AOJA W,OUTWR2
OUTWR3: EXCH W,L
OUTCHR [" "]
PUSHJ P,DECOUT
MOVE L,W
OUTWR4: OUTSTR [ASCIZ/
/]
CPOPJ: POPJ P,
OUTWRQ: MOVEI W,1
TDNN W,DATA+1(A)
AOJA A,.-1
MOVS Y,DATA+2(A) ;PICK UP W.O.
JUMPE Y,CPOPJ ;BUILT IN WORD THAT HASN'T OCCURRED?
CAIN Y,-1 ;NO, NON-WORD?
POPJ P, ;YES
OUTWR5: LDB Z,[POINT 6,DATA+1(Y),5];PICK UP HIGH ORDER 6 BITS OF DUMP MODE CMD
CAIE Z,77
UFATAL 432 ;;;WORD OCCURRENCE DOES NOT POINT TO STORY ENTRY
HLRZ Y,Y ;PTR TO NEXT W.O.
JUMPE Y,CPOPJ ;END OF W.O. LIST?
CAML Y,MAXPTR ;NO
UFATAL 434 ;;;PTR OUT OF RANGE IN WORD LIST
MOVS Y,DATA(Y) ;NEXT W.O.
JRST OUTWR5
;GETFIL DECOUT NXTDG NOLOOK NOENTR
COMMENT ⊗
Call with AC C containing first char of filename, and TYPNT containing
a byte pointer into rest of name.
Call by:
PUSHJ P,GETFIL
<FILENAME-SPECIFICATION-ERROR RETURN>
<SUCCESS RETURN>
On success return, filename will be in four-word block at FILEF.
ACCUMULATOR USAGE:
C holds current character.
E counts characters in each part of name, ext, p, pn.
R is byte pointer into filename block; also temp AC.
F is flag register with following LEFT-half flags:
QUOTE ;filename quoted with ↓
GOTEXT ;have seen extension
GOTP ;have seen project
GOTPN ;have seen programmer name
STORAGE:
TYPNT is byte pointer to input string containing filename.
FILEF is a four-word LOOKUP-type block for holding scanned filename.
end of comment ⊗
GETFIL: SETZM FILEF
MOVE E,[FILEF,,FILEF+1]
BLT E,FILEF+3 ;clear 4-word filename block
TLZ F,QUOTE!GOTEXT!GOTP!GOTPN
MOVE R,[POINT 6,FILEF]
MOVEI E,6 ;limit filename to 6 chars
CAIN C,"↓"
JRST GETFL0
CAIL C,"0"
CAILE C,"z"
TLO F,QUOTE ;NOT A LETTER, QUOTE IT
JRST GETFL0
GETFL1: TRZ C,40 ;convert char to sixbit
TRZE C,100
TRO C,40
SOJL E,.+2
IDPB C,R
GETFL2: ILDB C,TYPNT
GETFL0: CAIN C,"↓"
TLCA F,QUOTE
CAIN C,TAB
JRST GETFL2
;insert special tests here to have filename end on certain chars, eg:
; cain c,"/"
; jrst getfl5 ;end of filename
CAIG C,"z"
CAIGE C," " ;legal SIXBIT char?
JRST GETFL5 ;NO. ASSUME END OF FILENAME
TLNE F,QUOTE ;ARE WE QUOTING A NAME?
JRST GETFL1 ;YES, DON'T MAKE SPECIAL TESTS
CAIN C," "
JRST GETFL2 ;IGNORE SPACES IN FILENAME
CAIN C,"]"
JRST GETFL4 ;END OF PPN
CAIN C,"["
JRST GETFP ;PROJECT NEXT
CAIN C,","
JRST GETFPN ;PROGRAMMER NAME NEXT
CAIE C,"."
JRST GETFL1 ;CHAR IN NAME
TLOE F,GOTEXT ;EXTENSION NEXT
JRST BADNAM ;OOPS, TWO EXTENSIONS
MOVE R,[POINT 6,FILEF+1]
GETFL3: MOVEI E,3
JRST GETFL2
GETFP: TLOE F,GOTP
JRST BADNAM ;OOPS, TWO PROJECTS
MOVE R,[POINT 6,FILEF+3]
JRST GETFL3
GETFPN: TLON F,GOTPN
TLNN F,GOTP
JRST BADNAM ;OOPS, TWO PROGRAMMER NAMES OR MISSING PROJECT
MOVE R,[POINT 6,FILEF+3,17]
JUMPLE E,GETFL3
EXCH C,FILEF+3
LSH C,-6 ;RIGHT-JUSTIFY PROJECT
SOJG E,.-1
EXCH C,FILEF+3
JRST GETFL3
GETFL4: ILDB C,TYPNT ;GET CHAR AFTER "]"
GETFL5: TLNN F,GOTP ;PROJECT SPECIFIED?
JRST GETFL9 ;NO
TLNN F,GOTPN ;PROGRAMMER NAME SPECIFIED?
JRST GETFL6 ;NO, MAKE SURE PROJECT IS RIGHT JUSTIFIED
JUMPLE E,GETFL8 ;YES. PROGRAMMER NAME ALREADY RIGHT JUSTIFIED?
HRRZ R,FILEF+3 ;NO
LSH R,-6 ;RIGHT JUSTIFY PROGRAMMER NAME
SOJG E,.-1
HRRM R,FILEF+3
JRST GETFL8
GETFL6: JUMPLE E,GETFL7 ;PROJECT ALREADY RIGHT JUSTIFIED?
HLLZ R,FILEF+3 ;NO
LSH R,-6 ;RIGHT-JUSTIFY PROJECT
SOJG E,.-1
HLLZM R,FILEF+3
GETFL7: SETZ R, ;GET OWN DISK PPN
DSKPPN R,
GETFL8: HRRM R,FILEF+3 ;USE PROGRAMMER NAME FROM ALIAS
GETFL9: AOS (P) ;FILENAME SUCCESSFULLY SCANNED
BADNAM: POPJ P,
NOLOOK: OUTSTR [ASCIZ/
LOOKUP FAILED -- /]
HRRZ Y,X ;GET ERROR CODE
CAILE Y,MAXERR
MOVEI Y,MAXERR
OUTSTR @FERROR(Y)
OUTSTR [ASCIZ/.
/]
UFATAL 440(X) ;;;LOOKUP FAILED
NOENTR: OUTSTR [ASCIZ/
ENTER FAILED -- /]
HRRZ X,X ;GET ERROR CODE
CAILE X,MAXERR
MOVEI X,MAXERR
OUTSTR @FERROR(X)
OUTSTR [ASCIZ/.
/]
HALT .
FERROR: [ASCIZ/NO SUCH FILE/]
[ASCIZ/ILLEGAL PPN/]
[ASCIZ/PROTECTION VIOLATION/]
[ASCIZ/FILE BUSY/]
MAXERR←←.-FERROR
[ASCIZ/BAD RETRIEVAL OR OTHER HORRIBLE ERROR/]
DECOUT: MOVE Q,[POINT 7,TYBUF]
PUSHJ P,NXTDG
SETZ L,
IDPB L,Q
OUTSTR TYBUF
POPJ P,
NXTDG: IDIVI L,=10
HRLM M,(P)
JUMPE L,.+2
PUSHJ P,NXTDG
HLRZ M,(P)
ADDI M,60
IDPB M,Q
POPJ P,
;GETDAY DATA
GETDAY: MOVSI X,'DAT'
SETZB Y,Z
SETZ W,
DAYCNT W, ;TODAY'S DATE
SKIPN AUTOCK ;SKIP IF WANT LAST COMPLETE DAY'S NEWS
JRST CHK0
TIMER A, ;TIME IN TICS
IDIVI A,=60 ;TIME IN SECS
CAIGE A,APMIDNIGHT ;NEXT DAY AP STYLE YET?
SUBI W,1 ;NO, USE YESTERDAY'S DATE
JRST CHK0
LIT
VAR
DATA: 0
END CHK